﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using PatientsManagement.Database;

namespace PatientsManagement.Patients_and_Doctors
{
    public partial class AddDoctor : Form
    {
        Validator validator;
        bool createPressed = false;
        bool edit = false;
        string doctorID;
        public AddDoctor()
        {
            InitializeComponent();
            FillCombo();
            validator = new Validator(textboxesErrorProvider);
            validator.IsEmpty(forename, "Należy podać imię");
            validator.IsEmpty(surname, "Należy podać nazwisko");
            validator.IsEmpty(homeTown, "Należy podać miasto zamieszkania");
            validator.IsEmpty(street, "Należy podać ulicę");
            validator.IsEmpty(houseNumber, "Należy podać numer domu");
            validator.EmptyLengthValidation(postalCode, "Należy podać kod pocztowy", "Kod pocztowy powinien składać się z 5 znaków", 6);
            validator.EmptyLengthValidation(pesel, "Należy podać pesel", "Pesel powinien składać się z 11 znaków", 11);
        }

        public AddDoctor(string doctorID,string selectedForename, string selectedSurname, string selectedCity, string selectedStreet, string selectedHouseNumber, string selectedPostalCode, string selectedPesel,string selectedSpecialization)
        {
            InitializeComponent();
            edit = true;
            validator = new Validator(textboxesErrorProvider);
            validator.IsEmpty(forename, "Należy podać imię");
            validator.IsEmpty(surname, "Należy podać nazwisko");
            validator.IsEmpty(homeTown, "Należy podać miasto zamieszkania");
            validator.IsEmpty(street, "Należy podać ulicę");
            validator.IsEmpty(houseNumber, "Należy podać numer domu");
            validator.EmptyLengthValidation(postalCode, "Należy podać kod pocztowy", "Kod pocztowy powinien składać się z 5 znaków", 6);
            validator.EmptyLengthValidation(pesel, "Należy podać pesel", "Pesel powinien składać się z 11 znaków", 11);
            forename.Text = selectedForename;
            surname.Text = selectedSurname;
            homeTown.Text = selectedCity;
            street.Text = selectedStreet;
            houseNumber.Text = selectedHouseNumber;
            postalCode.Text = selectedPostalCode;
            pesel.Text = selectedPesel;
            FillCombo();
            doctorSpecialization.SelectedItem = selectedSpecialization;
            this.doctorID = doctorID;
            add.Text = "Zapisz";
        }

        private void FillCombo()
        {
            List<string> specializations = DoctorsData.DoctorSpecializations();
            foreach (string specialization in specializations)
            {
                doctorSpecialization.Items.Add(specialization);
            }
            doctorSpecialization.SelectedIndex = 0;
        }

        #region Validation
        private void forename_Validating(object sender, EventArgs e)
        {
            validator.IsEmpty(sender, "Należy podać imię");
            forenameInfo.Visible = false;
        }

        private void surname_Validating(object sender, EventArgs e)
        {
            validator.IsEmpty(sender, "Należy podać nazwisko");
            surnameInfo.Visible = false;
        }

        private void homeTown_Validating(object sender, EventArgs e)
        {
            validator.IsEmpty(sender, "Należy podać miasto zamieszkania");
            homeTownInfo.Visible = false;
        }

        private void street_Validating(object sender, EventArgs e)
        {
            validator.IsEmpty(sender, "Należy podać ulicę");
            streetInfo.Visible = false;
        }

        private void houseNumber_Validating(object sender, EventArgs e)
        {
            validator.IsEmpty(sender, "Należy podać numer domu");
            houseNumberInfo.Visible = false;
        }

        private void postalCode_Validating(object sender, EventArgs e)
        {
            validator.EmptyLengthValidation(postalCode, "Należy podać kod pocztowy", "Kod pocztowy powinien składać się z 5 znaków", 6);
            postalCodeInfo.Visible = false;
        }

        private void pesel_Validating(object sender, EventArgs e)
        {
            validator.EmptyLengthValidation(pesel, "Należy podać pesel", "Pesel powinien składać się z 11 znaków", 11);
            peselInfo.Visible = false;
        }
        #endregion

        private void add_Click(object sender, EventArgs e)
        {
            createPressed = true;
        }

        private void AddDoctor_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (createPressed)
            {
                if (!(validator.NoValidation(new List<TextBox> { forename, surname, homeTown, street, houseNumber }) && validator.NoValidation(new List<MaskedTextBox> { postalCode, pesel })))
                {
                    e.Cancel = true;
                    if (textboxesErrorProvider.GetError(forename) != "")
                        forenameInfo.Visible = true;
                    if (textboxesErrorProvider.GetError(surname) != "")
                        surnameInfo.Visible = true;
                    if (textboxesErrorProvider.GetError(homeTown) != "")
                        homeTownInfo.Visible = true;
                    if (textboxesErrorProvider.GetError(street) != "")
                        streetInfo.Visible = true;
                    if (textboxesErrorProvider.GetError(houseNumber) != "")
                        houseNumberInfo.Visible = true;
                    if (textboxesErrorProvider.GetError(postalCode) != "")
                        postalCodeInfo.Visible = true;
                    if (textboxesErrorProvider.GetError(pesel) != "")
                        peselInfo.Visible = true;
                    createPressed = false;
                }
            }
            if (e.Cancel == false && createPressed == true && edit == false)
            {
                MessageBox.Show("Doktor " + forename.Text + " " + surname.Text + " został dodany do bazy danych.");
            }
        }

        internal void AddToDatabase()
        {
            DoctorsData.AddDoctor(forename.Text, surname.Text, homeTown.Text, street.Text, houseNumber.Text, postalCode.Text, pesel.Text,doctorSpecialization.Text);
        }

        internal void SaveChangesToDatabase()
        {
            DoctorsData.EditDoctor(doctorID, forename.Text, surname.Text, homeTown.Text, street.Text, houseNumber.Text, postalCode.Text, pesel.Text, doctorSpecialization.Text);
            MessageBox.Show("Zmiany dla doktora " + forename.Text + " " + surname.Text + " zostały zapisane.");
        }
    }
}
